package tools

import (
	"fmt"
	"goGin/model"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Addcof struct {
	Dbname string
	Key    []string
	Val    []interface{}
}
type Config struct {
	Host     string
	Port     string
	Database string
	Username string
	Password string
	Charset  string
}

var Initconfig = Config{
	Host:     "localhost",
	Port:     "3306",
	Database: "mydemo",
	Username: "root",
	Password: "root",
	Charset:  "utf8",
}

func InitDB(c Config) *gorm.DB {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true",
		c.Username,
		c.Password,
		c.Host,
		c.Port,
		c.Database,
		c.Charset)
	//这里 gorm.Open()函数与之前版本的不一样，大家注意查看官方最新gorm版本的用法
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("Error to Db connection, err: " + err.Error())
	}
	sqlDB, err := db.DB()
	// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
	sqlDB.SetMaxIdleConns(10)
	// SetMaxOpenConns 设置打开数据库连接的最大数量。
	sqlDB.SetMaxOpenConns(10000)
	// SetConnMaxLifetime 设置了连接可复用的最大时间。
	sqlDB.SetConnMaxLifetime(time.Hour)
	model.InitsDb(db)
	db = db.Debug()
	return db
}
